#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
文档转换器启动脚本
支持 Word、Markdown、PDF 之间的相互转换
"""

import os
import sys
import argparse
import logging

# 添加项目根目录到Python路径
project_root = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, project_root)

from backend.app import create_app
from backend.config_manager import config_manager

def setup_logging():
    """设置日志"""
    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    )

def main():
    """主函数"""
    parser = argparse.ArgumentParser(description='文档转换器服务')
    parser.add_argument(
        '--host', 
        default=None,
        help=f'服务器主机地址 (默认: {config_manager.get_server_host()})'
    )
    parser.add_argument(
        '--port', 
        type=int,
        default=None,
        help=f'服务器端口 (默认: {config_manager.get_server_port()})'
    )
    parser.add_argument(
        '--debug', 
        action='store_true',
        help='启用调试模式'
    )
    parser.add_argument(
        '--env',
        choices=['development', 'production', 'testing'],
        default=None,
        help=f'运行环境 (默认: {config_manager.get_environment()})'
    )
    parser.add_argument(
        '--config',
        default='config.yaml',
        help='配置文件路径 (默认: config.yaml)'
    )
    
    args = parser.parse_args()
    
    # 设置日志
    setup_logging()
    logger = logging.getLogger(__name__)
    
    try:
        # 检查配置文件是否存在
        config_path = os.path.join(project_root, args.config)
        if not os.path.exists(config_path):
            logger.error(f"配置文件不存在: {config_path}")
            logger.info("请确保config.yaml文件存在于项目根目录")
            sys.exit(1)
        
        # 创建Flask应用
        app = create_app(args.env)
        
        # 获取运行参数
        host = args.host or config_manager.get_server_host()
        port = args.port or config_manager.get_server_port()
        debug = args.debug or config_manager.get_server_debug()
        use_reloader = config_manager.get_server_use_reloader() if debug else False
        
        # 显示启动信息（只在主进程显示，避免重载时重复）
        if os.environ.get('WERKZEUG_RUN_MAIN') != 'true':
            logger.info("=" * 60)
            logger.info("🚀 文档转换器服务启动中...")
            logger.info("=" * 60)
            logger.info(f"📍 服务地址: http://{host}:{port}")
            logger.info(f"🌍 运行环境: {config_manager.get_environment()}")
            logger.info(f"🔧 调试模式: {'开启' if debug else '关闭'}")
            logger.info(f"🔄 自动重载: {'开启' if use_reloader else '关闭'}")
            logger.info(f"📁 上传目录: {config_manager.get_upload_folder()}")
            logger.info(f"📂 临时目录: {config_manager.get_temp_folder()}")
            logger.info(f"📄 支持格式: {', '.join(config_manager.get_allowed_extensions())}")
            logger.info(f"📊 最大文件: {config_manager.get_max_file_size() // (1024*1024)}MB")
            logger.info("=" * 60)
            logger.info("💡 API接口:")
            logger.info(f"   健康检查: http://{host}:{port}/api/health")
            logger.info(f"   文档转换: http://{host}:{port}/api/convert")
            logger.info(f"   批量转换: http://{host}:{port}/api/batch-convert")
            logger.info(f"   支持格式: http://{host}:{port}/api/formats")
            logger.info(f"   配置信息: http://{host}:{port}/api/config")
            logger.info("=" * 60)
            logger.info("按 Ctrl+C 停止服务")
            logger.info("=" * 60)
        
        # 启动服务器
        app.run(
            host=host,
            port=port,
            debug=debug,
            use_reloader=use_reloader,
            threaded=True
        )
        
    except KeyboardInterrupt:
        logger.info("\n👋 服务已停止")
    except Exception as e:
        logger.error(f"❌ 启动失败: {str(e)}")
        sys.exit(1)

if __name__ == "__main__":
    main() 